package jp.co.toshiba.ffsa.service.csct;

import java.util.List;

import jp.co.toshiba.ffsa.entity.User;
import jp.co.toshiba.ffsa.mail.SendMaiMail;
import jp.co.toshiba.ffsa.service.common.CommonService;
import jp.co.toshiba.ffsa.service.common.ConstantValue;

import org.seasar.extension.jdbc.JdbcManager;
import org.seasar.extension.jdbc.where.SimpleWhere;
import org.seasar.framework.container.SingletonS2Container;
import org.seasar.framework.container.factory.SingletonS2ContainerFactory;
import org.seasar.mai.mail.MailAddress;
import org.seasar.struts.util.MessageResourcesUtil;

import com.ozacc.mail.MailSendException;

/**
 *お問い合わせ内容入力Serviceクラス
 * @author npc
 */
public class Csct101Service {
    /** メールアドレス */
    private String emailAddress;
    /** タイトル */
    private String subject;
    /** 本文 */
    private String body;
    /** userID */
    private String userId;
    /** 送信先メールアドレス(To) */
    private String[] mailAddressTo;
    /** ユーザーマスタ */
    private User user = null;
    /** エラーコード */
    private String errorCode;

    /**
     * ユーザー情報取得処理
     * @throws Exception
     */
    public User getUser() throws Exception{

        // S2Container初期化
        SingletonS2ContainerFactory.init();

        // S2ContainerからJdbcManagerを取得
        JdbcManager jdbcManager = SingletonS2Container.getComponent(JdbcManager.class);
        try{
            // 検索条件
            SimpleWhere swh = new SimpleWhere().eq("userID", this.userId)
                                               .eq("deleteFlag", "0");

            // 一覧取得
            user= jdbcManager.from(User.class)
                                     .where(swh)
                                     .getSingleResult()
                                     ;

            if(user != null){
                this.emailAddress = user.mailAddress;
            }

        }catch(Exception e){
            throw e;
        }

        return user;
    }


    /**
     * メール送信TO一覧取得処理
     * @throws Exception エラー
     */
    public void getMailTolist( ) throws Exception {

        // S2Container初期化
        SingletonS2ContainerFactory.init();
        // S2ContainerからJdbcManagerを取得
        JdbcManager jdbcManager = SingletonS2Container.getComponent(JdbcManager.class);
        try{

            // 一覧取得
            List<User> results = jdbcManager.selectBySqlFile(User.class,
                    "data/selectMailAddTo.sql")
                    .getResultList();

           if(results != null){
               int i = 0;
               mailAddressTo = new String[results.size()];
               for(User userTo : results){
                   mailAddressTo[i] = userTo.mailAddress;
                   i++;
               }
            }

        }catch(Exception e){
            throw e;
        }
    }

    /**
     * メール送信処理
     * @return 処理結果
     * @throws Exception エラー
     */
    public Boolean mailSend( ) throws Exception {
        boolean successFlag = false;
        try {
            // 顧客情報取得
            getUser();

            // メール情報をセット
            SendMaiMail sendMaiMail = new SendMaiMail();

            // 送信元メールアドレス(From)
            sendMaiMail.setMailAddressFrom(MessageResourcesUtil.getMessage("mail_address_from"));

            // 送信先メールアドレス(To)
            CommonService commonService = new CommonService();
            MailAddress[] sendMailAddressTo = commonService.getRegionAdministrator(user.region);
            sendMaiMail.setMailAddressTo(sendMailAddressTo);

            sendMaiMail.setReplacementItem1(user.mailAddress);
            sendMaiMail.setReplacementItem2(subject);
            sendMaiMail.setReplacementItem3(body);

            // 送信
            successFlag = sendMaiMail.sendMail(ConstantValue.inquiryMail);

            if(!successFlag){
                this.errorCode = "csct001.901";
                return false;
            }

        }catch(MailSendException m){
            return false;
        }catch(Exception e){
            e.printStackTrace();
            throw e;
        }
        return true;

    }

    /**
     * メールアドレスをセットする
     * @param emailAddress
     */
    public void setEmailAddress(String emailAddress){this.emailAddress = emailAddress;}
    /**
     * bodyをセットする
     * @param body
     */
    public void setBody(String body){this.body = body;}
    /**
     * ユーザーIDをセットする
     * @param userId
     */
    public void setUserId(String userId){this.userId = userId;}
    /**
     * subjectをセットする
     * @param subject
     */
    public void setSubject(String subject) {
        this.subject = subject;
    }
    /**
     * メールアドレスを取得する
     * @return emailAddress
     */
    public String getEmailAddress(){return this.emailAddress;}
    /**
     * bodyを取得する
     * @return body
     */
    public String getBody(){return this.body;}
    /**
     * ユーザーIDを取得する
     * @return userID
     */
    public String getUserID(){return this.userId;}
    /**
     * subjectを取得する
     * @return subject
     */
    public String getSubject() {
        return subject;
    }
    /**
     * 入力チェックエラーコードを取得する
     * @return errorCode
     */
    public String getErrorCode(){
        return this.errorCode;
    }

}
